# 导入所需模块
import akshare as ak
import tkinter as tk
from tkinter import ttk
from pandastable import Table, config

# 创建主窗口
root = tk.Tk()
root.geometry('600x400+300+200')  # 设置主窗口大小和位置
root.resizable(width=False, height=False)  # 禁止拉伸窗口
root.title('城市生活成本查询')  # 设置主窗口标题

# 创建标签组件并显示在主窗口中
region_label = ttk.Label(root, text='请选择区域：')
region_label.place(x=5, y=5, width=80, height=25)

# 定义下拉列表框组件的选项
region_options = {
    '全球': 'world',
    '欧洲': 'europe',
    '北美洲': 'north-america',
    '拉丁美洲': 'latin-america',
    '亚洲': 'asia',
    '中东': 'middle-east',
    '非洲': 'africa',
    '大洋洲': 'oceania'
}

# 创建下拉列表框组件并显示在主窗口中
region_combobox = ttk.Combobox(root, values=list(region_options.keys()), state='readonly')
region_combobox.current(0)  # 设置默认选中第一个选项
region_combobox.place(x=90, y=5, width=100, height=25)

# 创建“确定”按钮并显示在主窗口中
submit_button = ttk.Button(root, text='确定')
submit_button.place(x=200, y=5, width=50, height=25)

# 创建一个框架组件用于容纳表格
f = ttk.Frame(root)
f.place(x=5, y=35, width=590, height=365)

# 创建一个表格组件并显示在框架组件中
pt = Table(f, dataframe=None, showtoolbar=True, showstatusbar=True, editable=False)
options = {'floatprecision': 2, 'font': '思源黑体', 'fontsize': 10}  # 设置表格的样式选项
config.apply_options(options, pt)  # 应用样式选项
pt.show()

# 定义“确定”按钮的功能
def fetch_data_and_display():
    # 获取用户选择的区域
    selected_region = region_combobox.get()
    # 获取所选区域对应的参数值
    selected_region_value = region_options[selected_region]
    # 获取对应区域的生活成本数据
    cost_living_df = ak.cost_living(region=selected_region_value)
    # 在窗口的表格中显示获取的数据
    pt.model.df = cost_living_df
    pt.autoResizeColumns()
submit_button.configure(command=fetch_data_and_display)  # 单击按钮时执行指定的函数

# 启动主循环，显示主窗口
root.mainloop()
